import axios from "axios"
const baseURL = "http://localhost:3003/" // api的base_url 可以根据不同环境进行配置

// 创建实例
const instance = axios.create({
    baseURL: baseURL || process.env.REACT_APP_API_URL,
    timeout: 10000,
    headers: { "Content-Type": "application/json" },
})

// 请求拦截器,通常用于设置请求头、token等
instance.interceptors.request.use(
    (config) => {
        // const token = localStorage.getItem("token")
        // if (token) config.headers.Authorization = `Bearer ${token}`
        return config
    },
    (error) => {
        console.log("请求拦截器错误", error)
        return Promise.reject(error)
    }
)

// 响应拦截器， 通常用于处理错误、统一处理数据格式等
instance.interceptors.response.use(
    (response) => {
        const res = response.data

        // 根据业务code处理错误，比如token失效，清除用户信息并返回登录页面（通常是dispatch vuex的actions）
        if (res.code == 50008) return Promise.reject(new Error("非法token"))
        if (res.code == 50012) return Promise.reject("没有权限")
        if (res.code == 50014) return Promise.reject("token失效")
        return res
    },
    (error) => {
        if (error.response) {
            switch (error.response.status) {
                case 401:
                    console.error("身份验证失败")
                    break
                case 500:
                    console.error("服务器错误")
                    break
            }
        }
        if (error.message == "Network Error") {
            console.error("网络错误")
            return {
                code: 500,
                message: "网络错误",
            }
        }

        console.log("响应拦截器错误", error)
        return Promise.reject(error?.response?.data || error)
    }
)

// 封装方法
export const http = {
    get: (url, params) => instance.get(url, { params }),
    post: (url, data) => instance.post(url, data),
    put: (url, data) => instance.put(url, data),
    delete: (url) => instance.delete(url),
    patch: (url, data) => instance.patch(url, data),
}
